// 使用数据库
// use test

// 展示所有集合
// show collections

/**
 * MongoDB 插入文档
 * db.<collection>.insert()
 */
// 插入单条数据
db.user.insertOne({"name":"test2","age":20});

// 插入多条数据
db.user.insertMany([
    {id:"001",name:"Simon",age:26},
    {id:"002",name:"Melody",age:26}
]);

// 自己指定_id
db.user.insertOne({_id:"1001","name":"test_id","age":25});
// --------------------------------------------------------------------------------
/**
 * 查询集合中的文档
 * db.collection.find()
 * --find() 查询所有文档
 */
// 查询集合中的文档
db.user.find();

// 查询指定文档
db.user.find({_id:"1001"});

db.user.find({age:26,name:"Simon"})

db.user.findOne({age:26})

// 查询所有结果的数量
db.user.find().count();
// -----------------------------------------------------------------------------------------
/**
 * 修改文档
 * db.collection.update(查询条件,新对象)
 * update()默认情况下会使用新对象来替代旧对象
 * 如果需要修改指定的属性而不是替换,需要使用修改操作符
 * -- $set 可以用来修改文档中的指定属性
 * -- $unset 可以用来删除文档的指定属性
 *
 * db.collection.updateMany()
 * 修改多个符合条件的文档
 *
 * db.collection.replaceOne()
 * 替换一个文档
 */
db.user.updateOne(
    {name: "Simon"},
    {
        $set:{
            age:20
        }
    }
)

db.user.updateMany(
    {age: 20},
    {
        $set:{
            age:24
        }
    }
)
// -----------------------------------------------------------------------------------------
/**
 * 删除文档
 * db.collection.remove()
 * 如果remove()第二个参数传true，则只会删除一个
 * db.collection.deleteOne()
 * db.collection.deleteMany()
 */
db.user.find();

db.user.deleteOne({_id:"1001"});

// 清空集合(性能略差)
db.user.remove({});

// 删除集合(推荐使用)
db.user.drop();

// 删除数据库
db.dropDatabase()

// -----------------------------------------------------------------------------------------
/**
 * 批量插入
 */
for (let i = 1; i <= 20000; i++) {
    db.numbers.insert({num:i});
}

db.numbers.find();


// 更高效率
let arr = [];
for (let i = 1; i <=20000 ; i++) {
    arr.push({num:i});
}
db.numbers.insert(arr);

// 查询numbers中num大于500的文档
db.numbers.find({num:{$gt:500}});

// 查询numbers中num小于30的文档
db.numbers.find({num:{$lt:30}});

// 查询numbers中num大于40且小于50的文档
db.numbers.find({num:{$gt:40,$lt:50}});

//查询numbers中的前10条数据
db.numbers.find().limit(10);

// 查询numbers中第10条到20条数据
// skip()跳过指定数量的数据
db.numbers.find().skip(10).limit(10);

db.numbers.find().limit(10).skip(10);


// -----------------------------------------------------------------------------------------
/**
 * 文档之间的关系
 * 一对一
 * 一对多
 * 多对多
 */
db.wh.insert([
    {
        name:"黄蓉",
        husband:{
            name:"郭靖"
        }
    },{
        name:"潘金莲",
        husband: {
            name: "武大郎"
        }
    }
]);

db.wh.find();

db.emp.find();
db.dept.find();

// 查询emp工资小于1000或大于2500的员工
db.emp.find({$or:[{sal:{$lt:1000}}, {sal: {$gt:2500}}]});

// 查询财务部所有员工
var depno = db.dept.findOne({dname:"财务部"}).deptno;
db.emp.find({depno:depno});

// 查询所有mgr为7698的所有员工
db.emp.find({mgr:7698});

// 为所有薪资低于1000的员工增加工资400元
db.emp.updateMany({sal:{$lte:1000}} , {$inc:{sal:400}});

db.emp.find();

// -----------------------------------------------------------------------------------------
/**
 * 排序sort和投影
 * 查询文档时，默认情况下按照_id进行升序排序
 * sort()需要传递一个对象来指定排序规则 1表示升序，-1表示降序
 */
db.emp.find().sort({sal:-1});

// 查询投影
db.emp.find({},{ename:1,_id:0,sal:1});












